金三银四跳槽季,聊聊微软面试
Editor's Note
又到了一年一度蠢蠢欲动的季节,外企是很多人心中的理想归宿,这次我们跟随超哥的脚步,了解一下微软面试的内容和具体要求
The following article is from 超哥的地盘 Author 超哥的地盘
很多人问我微软面试主要考察什么以及如何准备面试,这里我结合自身面试经历和在准备面试过程中查阅的大量资料做一个全面的总结。但是这里不会给出任何具体面试题目,主要担心具体的题目会把人的思维限制住,光准备那几道题目,结果面试的时候一个都没用上。我尽可能提供准备面试的最详细指导,有任何问题可以留言或私信我。
先介绍下个人背景,我是本科学历,非985、211院校,2009年毕业后一直做软件开发。主要做C++方面的开发,以Windows客户端和服务端开发为主,另外有三年的Ruby On Rails全栈开发经验。进入微软之前在国内某大厂做Windows客户端开发,在2021年12月份拿到了微软、腾讯的Offer。微软的职位是服务端开发,title是Senior Software Engineer,工作地点在北京。
微软在中国目前主要在北京、上海、苏州、深圳四个城市,最近几年,微软在大力发展苏州,岗位很多,目前,微软苏州已成为中国区最大的研发中心。
下面分别从面试整体流程、编程语言、算法、系统设计、英语、项目经历、基础知识几个方面加以阐述。
关于整体流程
微软的社会招聘面试总共是1轮电话面试+5轮线上面试(疫情原因)。候选人以内推为主,微软暂时未与猎头公司合作。简历筛选通过后,先约电话面试时间,电话面试和每轮线上面试时间都在1小时左右。电话面试通过后,大约一周以后会约线上面试时间,线上面试用的是Microsoft Teams,5轮线上面试一天完成,效率杠杠滴~。线上面试大约一周后会告知结果,通过之后就是offer、背调等流程。
电话面试主要对候选人做初步筛选,问一些项目经历、基础知识、算法。千万不要大意,电话面试问的算法可能非常难,我当时被问到3个困难级别算法(后来才知道电话面试官是我未来的直接领导)。电话面试之前最好准备好纸和笔,算法题可以在纸上推演一下,有助于整理思路。
关于编程语言
微软的面试不太注重编程语言本身的考察,因为对一个优秀的程序员来说编程语言不算障碍,比如我主要做C++方面的开发,但是面试的职位是用C#。这点国外大厂都一样,我同学在亚马逊也是如此。面试写算法的时候用你自己熟悉的编程语言即可。编程语言问题仅在电话面试和其中一轮线上面试问到了几个,都是针对你熟悉的语言,对我来说就是C++,难度不会太大。
关于算法
这是面试的重头戏,我是除了最后一轮外其余每轮都面了算法。方式是打开一个共享网址,手写代码,没有任何语法高亮和补全提示,所以平时一定要练好手写代码。难度大概是leetcode的中等和困难级别,也会有面试官自己想的题目,也会变换题目条件。leetcode刷个100道以上应该算是门槛值吧。另外推荐阅读微软亚洲研究院的同事编写的《编程之美》,该书作者全是公司内部人士,有很大的参考价值。
leetcode题目太多了,目前总共有2491道题(还在不断增长中),不知道哪些是高频题,无从下手,除了买plus会员外,你还可以参考这个网站:
https://codetop.cc/home
该网站也是微软的一个同事开发的,收录各大厂高频面试题。
目前网上写leetcode题解的特别多,遇到问题的时候搜一下能找到很多精彩的题解。
对于算法一定要特别重视,现在国内大厂也向国外大厂看齐,都考察算法,腾讯的6轮面试有4轮面了算法,其中第3轮几乎全是算法。leetcode中国网站排名第一的哥们是前微软员工,他总共通过了2456道题!!
还有一部分编程题不是纯算法,算法与实际问题结合,难度较大,一般不会让当场写代码,但是会让说思路,然后面试结束后把完整代码发给面试官。解决这种题目,平时的技术积累和思维方式很重要。
关于系统设计
这是面试的另一个重头戏,除了最后一轮外其余每轮都有系统设计题。系统设计的问题比较开放,主要是口述,有的也会让写伪代码。平时需要多积累,知识要有广度,对一些好的协议、系统设计都要了解,达到融会贯通、举一反三,这样才能在遇到未见过的问题时能从平时的知识积累里提炼出解决方案。Github有一个仓库是专门针对系统设计面试题的,可以作为参考,但是仅依靠这个仓库不足以通过系统设计面试,平时还是要多思考、学习各种系统的实现方式。
https://github.com/donnemartin/system-design-primer
关于英语
不同的部门面试时对英语的考察不一样,有的要求英文自我介绍,有的英文面试具体问题,准备个英文版的自我介绍应该是基本的要求。英语是微软的工作语言,后续的offer、公司的资料、邮件全是英文,英语不好的话会比较吃力。英语对程序员也是非常重要,学好英语很有必要。我本人是英语6级,建议没有过4级的(以前我以为所有本科生都过了4级)努力补一下这块短板。
项目经历
这是最后一轮大老板的主要问题。每个写在简历上的项目都要了熟于心,你在其中担任的角色,做的主要贡献,遇到了什么难题,项目最后达到了什么样的效果。提前按照简历准备一遍,做到心中有数。
基础知识
这部分问题相对少点,主要是计算机的基础知识,包括操作系统、网络协议以及一些具体的开源库。
大概就是这些,主要考察内容还是算法和系统设计。另外注意一点,在面试的时候如果遇到算法题不会的时候,可以跟面试官说出你的思路,让面试官给些提示,切记一言不发的思考,最后说不会。外企面试官喜欢沟通探讨(这一点跟国内大厂很不一样),有些问题本身也是开放性的,有多种思路,积极跟面试官沟通讨论很重要。
不同部门和不同面试官的面试风格、侧重点可能差别很大,但主要考察点应该没有太大出入。网上也有很多人写微软的面经,也可以多搜一些作为参考,但是他们列出的面试题在你面试的时候可能一个也不会遇到!
有兴趣挑战微软的,欢迎添加作者微信联系内推(备注内推)。祝大家金三银四都能找到理想的工作。
微软所有在招职位列表
https://careers.microsoft.com/us/en/search-results